package com.nenude.corejava.ch4;

import java.util.Arrays;

public class SortS {

	public static void main(String[] args) {
		// 冒泡排序
		//给定一个int 类型的数组，保存班级同学的年龄，编写一个算法，对年龄进行排序，分别进行升序和降序排序；
	
		
		int [] a={10,50,40,20};	
		System.out.println("排序前：");
		printArray(a);
	
		  bubbleSortAsc(a); //方法调用
	     printArray(a);     //方法调用
	     
		bubbleSortAsc1(a);
		printArray(a);
		
		
		int [] a2={10,50,40,20,89,78};	
		//import java.util.Arrays; --java 语言的api 工具类，这是对数组进行操作的工具
		
		Arrays.sort(a2);
		printArray(a2);
		//排序的使用思路：先按照特定规则进行排序，如果需要升序或降序，只需要反向输出即可;
		for(int i=a2.length-1;i>=0;i--){
			System.out.print(a2[i]+"\t");
		}
	}
	
	public static void printArray(int []data){
		for(int d:data){   //for（d=0;index.length;i++）//data 相当于数组下标
			System.out.print(d+"\t");
		}
		System.out.println();
	}
	
	
	//在一个类中可以编写一些方法
	//方法的基本结构：
	//1、public 访问修饰符号； static 静态修饰符号  ；  --可选
	//2、void 返回值类型 ；                                                           --必选
	//3、bubbleSortAsc方法名称；                                     --必选
	//4(int [] data) 参数列表  ；                                    --参数变量可选，括号必须有
	//5、大括号 {} 为方法体                                                      --在非抽象方法中必须有大括号，抽象方法没有方法体
	
	public static void bubbleSortAsc(int [] data){
		if(data==null) return;
		
		for(int i=0;i<data.length;i++){
			for(int k=0;k<data.length-1-i;k++){
				int tmp=data[k];
				if(data[k]>data[k+1]){//升序和降序的控制；大于号是升序排序
					data[k]=data[k+1];
					data[k+1]=tmp;
				}
			}
		}	
	}
	
	//-----------  降序  ---------
	public static void bubbleSortAsc1(int [] data){
		if(data==null) return;
		
		for(int i=0;i<data.length;i++){
			for(int k=0;k<data.length-1-i;k++){
				int tmp=data[k];
				if(data[k]<data[k+1]){//升序和降序的控制；小于号是降序排序
					data[k]=data[k+1];
					data[k+1]=tmp;
				}
			}
		}	
	}
	
	
	
	
}
